//
//  statusListViewModel.swift
//  新浪微博
//
//  Created by 焦林生 on 15/11/10.
//  Copyright © 2015年 焦林生. All rights reserved.
//

import UIKit
import SDWebImage

//微博数据列表视图模型
class StatusListViewModel {
    
    //微博数据数组  - 上拉/下拉刷新
    lazy var statusList = [StatusViewModel]()
    
    //下拉刷新计数
    var pulldownCount: Int?
    
    /**
    加载微博数据
    //isPullup  是否是上拉刷新
    - parameter finished: 完成回调
    */
    func loadStatus(isPullup isPullup: Bool, finished: (isSuccessed: Bool) -> ()) {
        
        //下拉刷新 数组中第一条微博 的 id
        let since_id = isPullup ? 0 : (statusList.first?.status.id ?? 0)
        //上拉刷新 数组中最后一条微博的id
        let max_id = isPullup ? (statusList.last?.status.id ?? 0) : 0
        
    
        StatusDAL.loadStatus(since_id, max_id: max_id) { (array) -> () in
            
            //如果数组为nil 表示有错误
            guard let array  = array else {
                
                finished(isSuccessed: false)
                
                return
            }
            
            //遍历数组的字典 字典转模型
            //1 可变的数组
            var arrayM = [StatusViewModel]()
            
            //2 字典转模型
            for dict in array {
                
                arrayM.append(StatusViewModel(status: Status(dict: dict)))
            }
            
            /**
            * 记录刷新数量
            */
            self.pulldownCount = since_id > 0 ? arrayM.count : 0
            
            //3 拼接数据
            //判断是否是上拉刷新
            if max_id > 0 {
                
                self.statusList += arrayM
            } else {
                //下拉刷新
                self.statusList = arrayM + self.statusList
            }
            
            //4缓存单张图片
            self.cacheSingleImage(arrayM, finished: finished)
            
        }
        
        
    }
    
    //缓存单张图片
    private func cacheSingleImage(arrayM: [StatusViewModel], finished: (isSuccessed: Bool) -> ()) {
    
        //1 创建调度组
        let group = dispatch_group_create()
        //缓存数据长度
        var dataLength = 0
        
        //2 遍历视图模型数组
        for vm in arrayM {
        
            //判断图片数量是否是单张图片
            if vm.thumbnailUrls?.count != 1 {
            
                continue
            }
            //获取URL
            let url = vm.thumbnailUrls![0]
           // print("开始缓存图像 \(url)")
            
            //SDWebImage 下载图像(缓存是自动完成的)
            //入组  监听后续的block
            dispatch_group_enter(group)
            
            //SDWebImage 核心下载函数   如果下载完成 会完成回调函数
            //下载并不是每次都下载成功
            SDWebImageManager.sharedManager().downloadImageWithURL(
                url,
                options: [],
                progress: nil,
                completed: { (image, _, _, _, _) -> Void in
                    
                    // 单张图片下载完成 － 计算长度
                    if let img = image,
                        let data = UIImagePNGRepresentation(img) {
                            
                            // 累加二进制数据的长度
                            dataLength += data.length
                    }
                    
                    // 出组
                    dispatch_group_leave(group)
            })
            
        }
        //3 监听调度组完成
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            print("缓存完成 \(dataLength / 1024) k")
            
            //完成回调  控制器才开始刷新表格
            finished(isSuccessed: true)
        }
    }
}


